package com.itjcloud.iot.gateway.tools;


import com.nimbusds.jose.HeaderParameterNames;
import com.nimbusds.jose.util.Base64URL;
import com.nimbusds.jose.util.JSONObjectUtils;
import lombok.extern.slf4j.Slf4j;

import java.util.Map;

/**
 * jwt工具
 */
@Slf4j
public class JwtTool {


    /**
     * 判断token是否是jwt
     *
     * @param jwt jwt的base64编码后的文本
     * @return 是/否
     */
    public static Boolean isJwt(String jwt) {
        try {
            if (jwt == null) {
                return false;
            }
            final int firstDotPos = jwt.indexOf(".");
            if (firstDotPos == -1) {
                //如果没有数据说明这个不是一个jwt
                return false;
            }
            Base64URL header = new Base64URL(jwt.substring(0, firstDotPos));
            Map<String, Object> parse = JSONObjectUtils.parse(header.decodeToString());
            //如果请求头中没有alg属性
            return parse.get(HeaderParameterNames.ALGORITHM) != null;
        } catch (Exception e) {
            log.error("解析jwt失败,解析的数据为{}. 打印的错误信息是{}", jwt, e.getMessage(), e);
            return false;

        }

    }


}
